package it.cast.wechat.utils;

import ch.qos.logback.classic.pattern.DateConverter;
import org.springframework.beans.BeanUtils;

import java.util.Map;
import java.util.UUID;

public class CommonUtils {
    /**
     * 返回一个不重复的字符串
     * @return
     */
    public static String uuid() {
        return UUID.randomUUID().toString().replace("-", "").toUpperCase();
    }


    //皮尔森公式 计算用户相似度
    public static double getUserSimilar(Map<String, Double> pm1, Map<String, Double> pm2) {
        int n = pm1.size();// 数量n
        Double sxy = 0.0;// Σxy=x1*y1+x2*y2+....xn*yn
        Double sx = 0.0;// Σx=x1+x2+....xn
        Double sy = 0.0;// Σy=y1+y2+...yn
        Double sx2 = 0.0;// Σx2=(x1)2+(x2)2+....(xn)2
        Double sy2 = 0.0;// Σy2=(y1)2+(y2)2+....(yn)2
        for (Map.Entry<String, Double> pme : pm1.entrySet()) {
            String key = pme.getKey();
            Double x = pme.getValue();
            Double y = pm2.get(key);
            if (x != null && y != null) {
                sxy += x * y;//x*y求和
                sx += x;//x求和
                sy += y;//y求和
                sx2 += Math.pow(x, 2.0);//x的平方求和
                sy2 += Math.pow(y, 2.0);//y的平方求和
            }
        }
        double sd = sxy - (sx * sy) / n;
        double sm = Math.sqrt((sx2 - (Math.pow(sx, 2) / n)) * (sy2 - (Math.pow(sy, 2) / n)));
        return Math.abs(sm == 0 ? 1 : sd / sm);
    }

}

